package demo3;


/**
 * 接口使用关键字interface来修饰
 * 接口当中的成员方法 只能是抽象方法 所有的方法都默认是public abstract
 * 接口当中的的成员变量 默认是public static final
 * 接口当中的方法 如果要实现需要用default来修饰
 * 接口当中的静态方法 可以有具体的实现
 * 接口不能进行实例化 new接口
 * 一个普通的类 可以通过implements来实现这个接口
 * 但要重写接口里面未实现的抽象方法
 */
interface IShape{
    //成员变量
    int a = 10;//public static final
    //成员方法 实现
    default void func(){
        System.out.println("默认的方法");
    }
    public static void staticFunc(){
        System.out.println("静态方法");
    }
    void draw();//public abstract修饰的方法 未实现
}


class Cycle implements IShape{
    @Override
    public void draw() {
        System.out.println("○");
    }
}

class Rect implements IShape{
    @Override
    public void draw() {
        System.out.println("◇");
    }
}

class Triangle implements IShape{
    @Override
    public void draw() {
        System.out.println("△");
    }
}

public class Test{
    //向上转型
    public static void drawMap(IShape shape){
        shape.draw();
    }

    public static void main(String[] args) {
        Cycle cycle = new Cycle();
        Rect rect = new Rect();
        Triangle triangle = new Triangle();
        drawMap(cycle);
        drawMap(rect);
        drawMap(triangle);
    }

    public static void main1(String[] args) {
        //IShape iShape = new IShape();//不能实例化接口
        //IShape iShape = new A();
        //iShape.draw();
        //iShape.func();
        IShape.staticFunc();
    }
}
